{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "计数器在114时到达MAJOR\n",
      "计数器在142时满了\n",
      "有6/58次上溢\n"
     ]
    },
    {
     "data": {
      "image/png": "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9eunzMxMSdLLL7+sjRs3KjExUW+88Yb69u2rTZs2tfq4fX19631ts9nqbav7KKu2trZNjgNA26HMAHCqrq7WypUr9Yc//KHeG/RXX32luLg4vfbaa5JOX8X4+OOPG/0egwcPVm1trdLS0hrdP3z4cGVkZKh37966+OKL6z2CgoIknS4O48eP1xNPPKHt27fLz89Pa9eudX6PYcOGacGCBdqwYYMGDRqkVatWNfp3+fn5SZJqampa/N/kXNriOAC0DcoMAKd3331XBQUF+vGPf6xBgwbVe9x2223OGUmPP/64Xn/9dT3++OPavXu3du3apcWLF0uSevfureTkZN1999166623lJmZqfXr1+uvf/2rJOmBBx7QiRMndOedd2rLli3av3+/1q1bp7vvvls1NTXavHmzUlJS9OWXXyo7O1tr1qzR0aNHNWDAAGVmZmrBggXauHGjsrKytG7dOn333XcaMGBAo8fTs2dPBQQEOAfnFhYWttl/q9YcB4C2RZkB4PTiiy/q6quvlsPhaLDv1ltv1Y4dO7Rt2zZNnDhRb775pt555x0NHTpUV155pTZv3ux87vLly3Xbbbdpzpw56t+/v+655x7nlOSoqCj961//Uk1Nja655hoNGjRIDz30kBwOh7y8vBQSEqLPPvtM1113nfr27atf/epX+sMf/qDJkycrMDBQ3377rW699Vb17dtXP/nJTzR37lzde++9jR6Pj4+PnnnmGf35z39WVFSUbr755jb7b9Wa4wDQtmzGME8QAAC4L67MAAAAt0aZAQAAbo0yAwAA3BplBgAAuDXKDAAAcGuUGQAA4NYoMwAAwK1RZgAAgFujzAAAALdGmQEAAG6NMgMAANza/w8P1WFI/KTmsAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import random\n",
    "\n",
    "# 初始化计数器\n",
    "counter = 0\n",
    "\n",
    "# 模拟访问次数\n",
    "num_accesses = 200  # 可以根据需要调整访问次数\n",
    "\n",
    "# 存储计数器值的列表\n",
    "counter_values = []\n",
    "MAX_CN = 64\n",
    "THRESHIOLD = 4\n",
    "FACTOR = 16\n",
    "get_max_at = 0\n",
    "overflow_cnt = 0\n",
    "for iter in range(num_accesses):\n",
    "    # 生成0~255之间的随机数\n",
    "    random_number = random.randint(0, MAX_CN +1)\n",
    "    \n",
    "    # 判断是否增加计数器值\n",
    "    if random_number >= (int)((counter * (FACTOR - 2))/FACTOR):\n",
    "        if(counter < MAX_CN):\n",
    "            counter += 1\n",
    "            if(counter == MAX_CN):\n",
    "                get_max_at = iter\n",
    "                print(f\"计数器在{iter}时满了\")\n",
    "            if(counter == MAX_CN - THRESHIOLD):\n",
    "                print(f\"计数器在{iter}时到达MAJOR\")\n",
    "        else:\n",
    "            overflow_cnt += 1\n",
    "    # 将计数器值添加到列表中\n",
    "    counter_values.append(counter)\n",
    "print(f\"有{overflow_cnt}/{num_accesses-get_max_at}次上溢\")\n",
    "# 可视化计数器值的变化（需要matplotlib库）\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.plot(range(num_accesses), counter_values)\n",
    "plt.xlabel(\"Access times\")\n",
    "plt.ylabel(\"CNT val\")\n",
    "# plt.title(\"计数器值随访问次数的变化\")\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "计数器在138时到达MAJOR\n",
      "计数器在158时满了\n",
      "有4/42次上溢\n"
     ]
    },
    {
     "data": {
      "image/png": "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iIiYxCNar1osxXsMGYZxxboLbDYbNputOsISERERN+DWNTP16tXDx8fnilqYtLS0K2prREREpGZy62TG39+fLl26kJiYWGx9YmIivXv3NikqERERcSdu/5hpypQpjB49mq5du9KrVy8WLFjAoUOHeOihh8wOTURERNyA2ycz99xzD6dOneLPf/4zKSkpJCQk8NlnnxEXF2d2aCIiIuIG3H6cmWtVkX7qIiIi4h68ZpwZERERkatRMiMiIiIeTcmMiIiIeDS3bwB8rS40CcrIyDA5EhERESmvC9/b5Wna6/XJTGZmJoDmaBIREfFAmZmZhIWFlVnG63sz2e12jh07RkhISKlTIFTWhRm5Dx8+7JU9pbz9+kDX6A28/frA+6/R268PdI2VYRgGmZmZREdHY7WW3SrG62tmrFYrjRo1cuk5QkNDvfbDCd5/faBr9Abefn3g/dfo7dcHusaKulqNzAVqACwiIiIeTcmMiIiIeDQlM9fAZrPxzDPPYLPZzA7FJbz9+kDX6A28/frA+6/R268PdI2u5vUNgEVERMS7qWZGREREPJqSGREREfFoSmZERETEoymZEREREY+mZKaSXn75ZZo0aUJAQABdunTh22+/NTukSpk1axbdunUjJCSEBg0aMGzYMPbu3VuszNixY7FYLMVePXv2NCniipsxY8YV8UdGRjq3G4bBjBkziI6OJjAwkP79+7Nr1y4TI664xo0bX3GNFouFRx55BPC8e/jNN99w2223ER0djcVi4cMPPyy2vTz3LC8vj0cffZR69eoRHBzM7bffzpEjR6rxKspW1jUWFBTw5JNP0q5dO4KDg4mOjub+++/n2LFjxY7Rv3//K+7rvffeW81XUrqr3cfyfC7d+T5e7fpK+p20WCz84x//cJZx53tYnu8Hd/ldVDJTCe+88w6TJ09m+vTpbN26lb59+zJ48GAOHTpkdmgVtmbNGh555BHWr19PYmIihYWFDBo0iKysrGLlbrnlFlJSUpyvzz77zKSIK6dt27bF4t+5c6dz2+zZs5kzZw7z5s0jKSmJyMhIBg4c6JzXyxMkJSUVu77ExEQA7rrrLmcZT7qHWVlZdOjQgXnz5pW4vTz3bPLkyaxYsYJly5bx3Xffce7cOYYOHUpRUVF1XUaZyrrG7OxstmzZwtNPP82WLVtYvnw5P/30E7fffvsVZcePH1/svr7yyivVEX65XO0+wtU/l+58H692fZdeV0pKCq+//joWi4U777yzWDl3vYfl+X5wm99FQyqse/fuxkMPPVRsXatWrYynnnrKpIiqTlpamgEYa9asca4bM2aMcccdd5gX1DV65plnjA4dOpS4zW63G5GRkcbf//5357rc3FwjLCzM+Pe//11NEVa9xx9/3GjWrJlht9sNw/DsewgYK1ascL4vzz07e/as4efnZyxbtsxZ5ujRo4bVajW++OKLaou9vC6/xpJs3LjRAIyDBw861/Xr1894/PHHXRtcFSnpGq/2ufSk+1iee3jHHXcYN954Y7F1nnQPL/9+cKffRdXMVFB+fj6bN29m0KBBxdYPGjSItWvXmhRV1UlPTwegTp06xdavXr2aBg0a0KJFC8aPH09aWpoZ4VXavn37iI6OpkmTJtx7773s378fgOTkZFJTU4vdT5vNRr9+/Tz2fubn5/PWW28xbty4YpOrevo9vKA892zz5s0UFBQUKxMdHU1CQoLH3tf09HQsFgvh4eHF1i9ZsoR69erRtm1bnnjiCY+qUYSyP5fedB+PHz/Op59+ygMPPHDFNk+5h5d/P7jT76LXTzRZ1U6ePElRURERERHF1kdERJCammpSVFXDMAymTJnCddddR0JCgnP94MGDueuuu4iLiyM5OZmnn36aG2+8kc2bN3vEaJY9evRg8eLFtGjRguPHj/PXv/6V3r17s2vXLuc9K+l+Hjx40Ixwr9mHH37I2bNnGTt2rHOdp9/DS5XnnqWmpuLv70/t2rWvKOOJv6e5ubk89dRTjBw5stgEfqNGjaJJkyZERkbyww8/MG3aNLZv3+58zOjurva59Kb7uGjRIkJCQhg+fHix9Z5yD0v6fnCn30UlM5V06V+84LjRl6/zNJMmTWLHjh189913xdbfc889zuWEhAS6du1KXFwcn3766RW/mO5o8ODBzuV27drRq1cvmjVrxqJFi5yNDb3pfr722msMHjyY6Oho5zpPv4clqcw988T7WlBQwL333ovdbufll18utm38+PHO5YSEBOLj4+natStbtmyhc+fO1R1qhVX2c+mJ9/H1119n1KhRBAQEFFvvKfewtO8HcI/fRT1mqqB69erh4+NzRUaZlpZ2RXbqSR599FE+/vhjvv76axo1alRm2aioKOLi4ti3b181RVe1goODadeuHfv27XP2avKW+3nw4EFWrVrFb3/72zLLefI9LM89i4yMJD8/nzNnzpRaxhMUFBRw9913k5ycTGJiYrFamZJ07twZPz8/j7yvcOXn0lvu47fffsvevXuv+nsJ7nkPS/t+cKffRSUzFeTv70+XLl2uqAJMTEykd+/eJkVVeYZhMGnSJJYvX85XX31FkyZNrrrPqVOnOHz4MFFRUdUQYdXLy8tjz549REVFOat3L72f+fn5rFmzxiPv5xtvvEGDBg0YMmRImeU8+R6W55516dIFPz+/YmVSUlL44YcfPOa+Xkhk9u3bx6pVq6hbt+5V99m1axcFBQUeeV/hys+lN9xHcNSWdunShQ4dOly1rDvdw6t9P7jV72KVNSWuQZYtW2b4+fkZr732mrF7925j8uTJRnBwsHHgwAGzQ6uwhx9+2AgLCzNWr15tpKSkOF/Z2dmGYRhGZmam8fvf/95Yu3atkZycbHz99ddGr169jIYNGxoZGRkmR18+v//9743Vq1cb+/fvN9avX28MHTrUCAkJcd6vv//970ZYWJixfPlyY+fOncaIESOMqKgoj7m+C4qKiozY2FjjySefLLbeE+9hZmamsXXrVmPr1q0GYMyZM8fYunWrsydPee7ZQw89ZDRq1MhYtWqVsWXLFuPGG280OnToYBQWFpp1WcWUdY0FBQXG7bffbjRq1MjYtm1bsd/NvLw8wzAM4+effzaeffZZIykpyUhOTjY+/fRTo1WrVkanTp084hrL+7l05/t4tc+pYRhGenq6ERQUZMyfP/+K/d39Hl7t+8Ew3Od3UclMJb300ktGXFyc4e/vb3Tu3LlYV2ZPApT4euONNwzDMIzs7Gxj0KBBRv369Q0/Pz8jNjbWGDNmjHHo0CFzA6+Ae+65x4iKijL8/PyM6OhoY/jw4cauXbuc2+12u/HMM88YkZGRhs1mM66//npj586dJkZcOV9++aUBGHv37i223hPv4ddff13i53LMmDGGYZTvnuXk5BiTJk0y6tSpYwQGBhpDhw51q2su6xqTk5NL/d38+uuvDcMwjEOHDhnXX3+9UadOHcPf399o1qyZ8dhjjxmnTp0y98IuUdY1lvdz6c738WqfU8MwjFdeecUIDAw0zp49e8X+7n4Pr/b9YBju87toOR+wiIiIiEdSmxkRERHxaEpmRERExKMpmRERERGPpmRGREREPJqSGREREfFoSmZERETEoymZEREREY+mZEZEREQ8mpIZEalxxo4dy7Bhw8wOQ0SqiJIZESnR2rVr8fHx4ZZbbjE7lEo7cOAAFouFbdu2FVv/wgsvsHDhQlNiEpGqp2RGREr0+uuv8+ijj/Ldd99x6NAhs8OpUmFhYYSHh5sdhohUESUzInKFrKws3n33XR5++GGGDh1aYi3Gxx9/TNeuXQkICKBevXoMHz7cuS0vL4+pU6cSExODzWYjPj6e1157zbl99+7d3HrrrdSqVYuIiAhGjx7NyZMnndvff/992rVrR2BgIHXr1mXAgAFkZWUBsHr1arp3705wcDDh4eH06dOHgwcPlngdTZo0AaBTp05YLBb69+8PXPmYqX///jz66KNMnjyZ2rVrExERwYIFC8jKyuI3v/kNISEhNGvWjM8//7zY8a/lOkSk6iiZEZErvPPOO7Rs2ZKWLVty33338cYbb3DpnLSffvopw4cPZ8iQIWzdupX//e9/dO3a1bn9/vvvZ9myZbz44ovs2bOHf//739SqVQuAlJQU+vXrR8eOHdm0aRNffPEFx48f5+6773ZuHzFiBOPGjWPPnj2sXr2a4cOHYxgGhYWFDBs2jH79+rFjxw7WrVvHgw8+iMViKfE6Nm7cCMCqVatISUlh+fLlpV7zokWLqFevHhs3buTRRx/l4Ycf5q677qJ3795s2bKFm2++mdGjR5OdnX3N1yEiVaxK5+AWEa/Qu3dvY+7cuYZhGEZBQYFRr149IzEx0bm9V69exqhRo0rcd+/evQZQrPylnn76aWPQoEHF1h0+fNgAjL179xqbN282AOPAgQNX7Hvq1CkDMFavXl2u60hOTjYAY+vWrcXWjxkzxrjjjjuc7/v162dcd911zveFhYVGcHCwMXr0aOe6lJQUAzDWrVt3zdchIlVLNTMiUszevXvZuHEj9957LwC+vr7cc889vP76684y27Zt46abbipx/23btuHj40O/fv1K3L5582a+/vpratWq5Xy1atUKgF9++YUOHTpw00030a5dO+666y5effVVzpw5A0CdOnUYO3YsN998M7fddhsvvPACKSkpVXLd7du3dy77+PhQt25d2rVr51wXEREBQFpa2jVfh4hULSUzIlLMa6+9RmFhIQ0bNsTX1xdfX1/mz5/P8uXLnV/GgYGBpe5f1jYAu93ObbfdxrZt24q99u3bx/XXX4+Pjw+JiYl8/vnntGnThn/961+0bNmS5ORkAN544w3WrVtH7969eeedd2jRogXr16+/5uv28/Mr9t5isRRbd+FRlt1ur5LrEJGqo2RGRJwKCwtZvHgx//znP4t9QW/fvp24uDiWLFkCOGox/ve//5V4jHbt2mG321mzZk2J2zt37syuXbto3LgxzZs3L/YKDg4GHIlDnz59ePbZZ9m6dSv+/v6sWLHCeYxOnToxbdo01q5dS0JCAkuXLi3xXP7+/gAUFRVV+t+kNFVxHSJSNZTMiIjTJ598wpkzZ3jggQdISEgo9vr1r3/t7JH0zDPP8Pbbb/PMM8+wZ88edu7cyezZswFo3LgxY8aMYdy4cXz44YckJyezevVq3n33XQAeeeQRTp8+zYgRI9i4cSP79+9n5cqVjBs3jqKiIjZs2MDMmTPZtGkThw4dYvny5Zw4cYLWrVuTnJzMtGnTWLduHQcPHmTlypX89NNPtG7dusTradCgAYGBgc7Guenp6VX2b3Ut1yEiVUvJjIg4vfbaawwYMICwsLArtt15551s27aNLVu20L9/f9577z0+/vhjOnbsyI033siGDRucZefPn8+vf/1rJk6cSKtWrRg/fryzS3J0dDTff/89RUVF3HzzzSQkJPD4448TFhaG1WolNDSUb775hltvvZUWLVrwxz/+kX/+858MHjyYoKAgfvzxR+68805atGjBgw8+yKRJk5gwYUKJ1+Pr68uLL77IK6+8QnR0NHfccUeV/Vtdy3WISNWyGIb6CYqIiIjnUs2MiIiIeDQlMyIiIuLRlMyIiIiIR1MyIyIiIh5NyYyIiIh4NCUzIiIi4tGUzIiIiIhHUzIjIiIiHk3JjIiIiHg0JTMiIiLi0ZTMiIiIiEf7/7941x1E0H7TAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from matplotlib.font_manager import FontProperties\n",
    "font = FontProperties(fname='/usr/share/fonts/wenquanyi/wqy-zenhei/wqy-zenhei.ttc')  # 更改为你的字体路径\n",
    "\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 初始化计数器\n",
    "counter = 0\n",
    "linear_counter = 0  # 线性计数器\n",
    "\n",
    "# 模拟访问次数\n",
    "num_accesses = 200  # 可以根据需要调整访问次数\n",
    "\n",
    "# 存储计数器值的列表\n",
    "counter_values = []\n",
    "linear_counter_values = []  # 线性计数器值列表\n",
    "MAX_CN = 64\n",
    "THRESHIOLD = 4\n",
    "FACTOR = 16\n",
    "get_max_at = 0\n",
    "overflow_cnt = 0\n",
    "for iter in range(num_accesses):\n",
    "    # 生成0~255之间的随机数\n",
    "    random_number = random.randint(0, MAX_CN +1)\n",
    "\n",
    "    # 判断是否增加计数器值\n",
    "    if random_number >= (int)((counter * (FACTOR - 2))/FACTOR):\n",
    "        if(counter < MAX_CN):\n",
    "            counter += 1\n",
    "            if(counter == MAX_CN):\n",
    "                get_max_at = iter\n",
    "                print(f\"计数器在{iter}时满了\")\n",
    "            if(counter == MAX_CN - THRESHIOLD):\n",
    "                print(f\"计数器在{iter}时到达MAJOR\")\n",
    "        else:\n",
    "            overflow_cnt += 1\n",
    "    # 将计数器值添加到列表中\n",
    "    counter_values.append(counter)\n",
    "    \n",
    "    # 更新并记录线性计数器的值\n",
    "    linear_counter = min(linear_counter + 1, MAX_CN)  # 确保不超过最大值\n",
    "    linear_counter_values.append(linear_counter)\n",
    "\n",
    "print(f\"有{overflow_cnt}/{num_accesses-get_max_at}次上溢\")\n",
    "\n",
    "# 可视化计数器值的变化\n",
    "plt.plot(range(num_accesses), counter_values, label='Major-Minor')\n",
    "plt.plot(range(num_accesses), linear_counter_values, label='Linear', linestyle='--')  # 绘制线性增长的曲线\n",
    "plt.xlabel(\"Access times\")\n",
    "plt.ylabel(\"CNT val\")\n",
    "plt.legend()  # 显示图例\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from matplotlib.font_manager import FontProperties\n",
    "font = FontProperties(fname='/usr/share/fonts/wenquanyi/wqy-zenhei/wqy-zenhei.ttc')  # 更改为你的字体路径\n",
    "\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 初始化计数器\n",
    "counter = 0\n",
    "linear_counter = 0  # 线性计数器\n",
    "\n",
    "# 模拟访问次数\n",
    "num_accesses = 200  # 可以根据需要调整访问次数\n",
    "\n",
    "# 存储计数器值的列表\n",
    "counter_values = []\n",
    "linear_counter_values = []  # 线性计数器值列表\n",
    "MAX_CN = 64\n",
    "THRESHIOLD = 4\n",
    "FACTOR = 16\n",
    "get_max_at = 0\n",
    "overflow_cnt = 0\n",
    "has_printed = False\n",
    "for iter in range(num_accesses):\n",
    "    # 生成0~255之间的随机数\n",
    "    random_number = random.randint(0, MAX_CN +1)\n",
    "\n",
    "    # 判断是否增加计数器值\n",
    "    if random_number >= (int)((counter * (FACTOR - 2))/FACTOR):\n",
    "        if(counter < MAX_CN):\n",
    "            counter += 1\n",
    "            if(not has_printed):\n",
    "                if(counter == MAX_CN):\n",
    "                    get_max_at = iter\n",
    "                    print(f\"计数器在{iter}时满了\")\n",
    "                if(counter == MAX_CN - THRESHIOLD):\n",
    "                    print(f\"计数器在{iter}时到达MAJOR\")\n",
    "                has_printed = True\n",
    "        else:\n",
    "            overflow_cnt += 1\n",
    "    # 将计数器值添加到列表中\n",
    "    counter_values.append(counter)\n",
    "    \n",
    "    # 更新并记录线性计数器的值\n",
    "    linear_counter = min(linear_counter + 1, MAX_CN)  # 确保不超过最大值\n",
    "    linear_counter_values.append(linear_counter)\n",
    "\n",
    "print(f\"有{overflow_cnt}/{num_accesses-get_max_at}次上溢\")\n",
    "\n",
    "# 可视化计数器值的变化\n",
    "plt.plot(range(num_accesses), counter_values, label='Major-Minor')\n",
    "plt.plot(range(num_accesses), linear_counter_values, label='Linear', linestyle='--')  # 绘制线性增长的曲线\n",
    "plt.xlabel(\"Access times\")\n",
    "plt.ylabel(\"CNT val\")\n",
    "plt.legend()  # 显示图例\n",
    "plt.show()\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.1.undefined"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
